package java学习.第05章_数组;

/**
 *
 * 虚拟机栈	用于存储正在执行的每个Java方法的局部变量表等。
 *          局部变量表存放了编译期可知长度的各种基本数据类型、对象引用，
 *          方法执行完，自动释放。
 * 堆内存	存储对象（包括数组对象），new来创建的，都存储在堆内存。
 * 方法区	存储已被虚拟机加载的类信息、常量、（静态变量）、
 *          即时编译器编译后的代码等数据。
 * 本地方法栈	当程序中调用了native的本地方法时，本地方法执行期间的内存区域
 * 程序计数器	程序计数器是CPU中的寄存器，它包含每一个线程下一条要执行的指令的地址
 *
 * 和数组相关的：虚拟机栈  堆内存
 *      虚拟机栈 ：用于存放方法中声明的变量
 *      堆内存 ：用于存放变量的具体值
 *
 *  数组存储的是连续的空间
 * 栈(先进后出)
 */
public class C_数组存储位置 {
    public static void main(String[] args) {
        int[] i = new int[5]; //    i这个名字 存放在虚拟机栈中
        Integer[] is = new Integer[4];

        ss(is);//会改变 引用数据类型传的是地址，所以会改变
        ss(is[0]);//但是 Integer 也是引用数据类型，但是不会改变 ，
        //因为  Integer 是final 不可改变  进行改变后，会重新生成一个新的，旧的不变
        System.out.println(is[2]);

    }
    private static void ss(Integer is) {
        is = 5;
    }
    private static void ss(Integer[] is) {
        is[2] = 5;
    }

}
